package com.heimachengxuyuan.base.producer;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;

import java.util.concurrent.TimeUnit;

/**
 * 发送同步消息
 */
public class SyncProducer {

    public static void main(String[] args) throws Exception {
        //1.创建消息生产者producer，并制定生产者组名
        DefaultMQProducer producer = new DefaultMQProducer("group1");
        //2.指定Nameserver地址
        producer.setNamesrvAddr("192.168.25.135:9876;192.168.25.138:9876");
        //3.启动producer
        producer.start();

        for (int i = 0; i < 10; i++) {
            //4.创建消息对象，指定主题Topic、Tag和消息体
            /**
             ** 参数1：消息的主题topic（就是消息的分类）
             参数2: 消息的tag（相当于一个更小分类）
             参数3：消息内容了。
             **/
            Message msg = new Message("springboot-mq", "Tag1", ("Hello World" + i).getBytes());
            //5.发送消息
            SendResult result = producer.send(msg);//这里就体现了同步消息撒，一定要等这个sendResult拿到了才可以往下走
            // 通过sendResult返回消息是否成功送达
            System.out.printf("%s%n", result);
            //发送状态
            SendStatus status = result.getSendStatus();
            //消息id
            String msgId = result.getMsgId();
            //消息接收队列的id
            int queueId = result.getMessageQueue().getQueueId();
            System.out.println("发送结果:" + result + "消息ID："  + msgId + "消息的队列ID："  + queueId) ;

            //线程睡1秒，再去发第二条消息。
            TimeUnit.SECONDS.sleep(1);
        }

        //6.关闭生产者producer
        producer.shutdown();
    }
}
